// #include <stdio.h>
// #include <stdbool.h>
//
// //如何创建函数
// //函数返回值类型  函数名(参数列表)
// //{ 函数体 }
//
// //void 无返回值
// void printHelloWorld()
// {
//     printf("hello world\n");
// }
//
// //如何设计函数
// //一个函数一个功能 不要把多种功能写在一个函数中
//
// //函数返回值类型 只要和return后面的值类型一致即可
// //函数名 一般小写
//
// int F1()
// {
//     return 100;
// }
//
// bool F2()
// {
//     return true;
// }
//
// //函数返回值一般具有特定含义
// //代表操作的成功与否
//
// int get_divided()
// {
//     int a,b;
//     scanf("%d%d",&a,&b);
//     if (b==0)
//     {
//         //函数返回值具有什么含义由自己决定 自己返回什么值代表什么含义
//         return -1;
//     }
//     return a/b;
// }
// //做数据加工的功能 函数调用的表达式就代表了函数返回值
// //函数返回值就是一个值
// int sum()
// {
//     return 100+200;
// }
// // return 可以结束函数 void 类型返回值函数 也可以存在return
// void F3()
// {
//     printf("hello world\n");
//     return;
//     printf("hello world\n"); //这行代码永远不会执行
// }
//
// //应用过程想要提早结束函数 通常结合if语句使用
// //break  跳出Switch 循环
//
// //scanf与printf返回值
// //scanf返回值代表成功读取的个数
// //printf返回值代表打印的字符个数
//
// //函数参数
// //无参无返回值的--> 效果类 也可以这样写
// void F4(void)
// {
//     printf("hello world\n");
// }
//
// // 加工数据 传参 自己在设计函数的时候如果解释不了参数的意思 就不要写参数
// double sumD(double a,double b)
// {
//     return a+b;
// }
// //传参规则
// //1.传参的个数和类型必须和函数定义的参数个数和类型一致
// //2. 传参的本质就是赋值的操作
//
// //什么是拷贝本
//
// //特殊的数组传参法
// //数字类必须传入数组长度
// void printArray(int arr[],int len)
// {
//     for (int i=0;i<len;i++)
//     {
//         printf("%d\n",arr[i]);
//     }
// }
//
// // 字符串不需要传入数组长度 因为字符串以\0结尾 有个结束标记
// void printString(char str[])
// {
//     printf("%s\n",str);
// }
//
// //通常调用寒素 实参和形参的类型必须一致
// //允许转换的情况下 会强制转换
//
// //函数调用 递归调用 实现顺序问题
//
// //调用的顺序问题  把函数实现放到主函数上面
// //实现顺序和调用顺序
// //如果被调用者在调用者的下面  因为程序编译时从上往下编译 调用者一般用在被调用者下面实现  函数声明可以提前调用函数
// //声明语法  不需要函数体 剩下的照抄
//
//
// //声明语法
//
// //声明语法 -> 有作用域 声明语法写在一起 统一写在上面  声明语法  形参名可以不写  但是类型必须写 返回值必须写
// void print_num(int a,int b);
//
// //调用的嵌套操作
// //以自身调用当做函数参数
// //max(100,max(200,300)); //没必要写在一起 可以通过中间变量的方式去做简化
// //函数体中自身调用自身 递归调用
//
//
// //递归
// //1. 退出性条件
// //2 推导公司
//
// int factorial(int n)
// {
//     if (n==1 || n==2)
//     {
//         return 1;
//     }
//     return factorial(n-2)+factorial(n-1);
// }
//
// //创建二维数组
// //类型 数组名[长度1][长度2] 长度1 是行数  长度2 列数
// //元数格式 长度1*长度2
//
// //二维数组的传参 列数不可以省略
// void printArray2(int arr[][3],int row,int cols)
// {
//     for (int i=0;i<row;i++)
//     {
//         for (int j=0;j<cols;j++)
//         {
//             printf("%d\t",arr[i][j]);
//         }
//         printf("\n");
//     }
// }
// //字符类的二维数组 可以存储多个字符串
//
// //二维数组的常规操作
//
//
//
//
//
//
// int main()
// {
//
//     //不同的初始化方式
//     // int temp[2][3]={1,2,3,4};  //其他值默认为0
//     // int value[2][3]={{1},{2}}; //其他值默认为0
//     // int data[][3]={{1,2,3},{4,5,6}}; //会自动推导出数组长度为2
//     // int t[][3]={1,2,3,4,5,6};//会自动推导出数组长度为2
//
//     // int number[2][2][2] = {1,2,3,4,5,6};
//     // for (int i=0;i<2;i++)
//     // {
//     //     for (int j=0;j<2;j++)
//     //     {
//     //         for (int k=0;k<2;k++)
//     //         {
//     //             printf("%d\t",number[i][j][k]);
//     //         }
//     //     }
//     // }
//
//     //会自动推导行数为3
//     char str[][100]={"hello","world","hello world"};
//
//     for (int i=0;i<3;i++)
//     {
//         //str[i] 代表的第i行的首地址
//         printf("%s\n",str[i]);
//     }
//
//
//
//
//
//     // int arr[2][3]={{1,2,3},{4,5,6}};
//     // for (int i=0;i<2;i++)
//     // {
//     //     for (int j=0;j<3;j++)
//     //     {
//     //         printf("%d\t",arr[i][j]);
//     //     }
//     //     printf("\n");
//     // }
//
//     // //函数调用
//     // printHelloWorld();
//     // //声明语法 -> 有作用域
//     // // void print_num(int a,int b);
//     // printString("hello world\n");
//     //
//     // // //调用表达式
//     // // int result = sum();
//     // //
//     // // //错误
//     // // //sum()=123;
//     // //
//     // // printf("result = %d\n",result);
//     // //
//     // // int a,b;
//     // // int n = scanf("%d%d",&a,&b);
//     // // printf("n = %d\n",n);
//     // //
//     // // //scanf 函数错误处理
//     // // //~ 按位取反
//     // // while (!scanf("%d",&a)) //因为如果数据输入失败    scanf返回值是0 0取反是1
//     // // {
//     // //     while(getchar()!='\n');
//     // //     printf("请输入整数\n");
//     // // }
//     // //
//     // // printf("a = %d\n",a);
//     //
//     // printf("%d\n",factorial(6));
//
//     //返回0 默认返回0 返回成功
//     return 0;
// }
//
// void print_num(int a,int b)
// {
//     printf("%d\n",a+b);
// }